/**
 * ajax封装
 * url 发送请求的地址
 * data 发送到服务器的数据，数组存储，如：{"date": new Date().getTime(), "state": 1}
 * async 默认值: true。默认设置下，所有请求均为异步请求。如果需要发送同步请求，请将此选项设置为 false。
 *    注意，同步请求将锁住浏览器，用户其它操作必须等待请求完成才可以执行。
 * type 请求方式("POST" 或 "GET")， 默认为 "GET"
 * dataType 预期服务器返回的数据类型，常用的如：xml、html、json、text
 * successfn 成功回调函数
 * errorfn 失败回调函数
 * completefn 完成后调用的回调函数
 * beforeSendfn 调用前
 */
sendAjax=function(url, data, async, type, dataType, successfn, errorfn,beforeSendfn ,completefn) {
    async = (async==null || async=="" || typeof(async)=="undefined")? "true" : async;
    type = (type==null || type=="" || typeof(type)=="undefined")? "post" : type;
    dataType = (dataType==null || dataType=="" || typeof(dataType)=="undefined")? "json" : dataType;
    data = (data==null || data=="" || typeof(data)=="undefined")? {"date": new Date().getTime()} : data;
    $.ajax({
        type: type,
        async: async,
        data: data,
        url: url,
        dataType: dataType,
        beforeSend:function(e){
            beforeSendfn(e);
        },
        complete: function(e){
            completefn(e);
        },
        success: function(d){
            successfn(d);
        },
        error: function(e){
            errorfn(e);
        }
    });
};

/**
 * ajax封装
 * url 发送请求的地址
 * data 发送到服务器的数据，数组存储，如：{"date": new Date().getTime(), "state": 1}
 * successfn 成功回调函数
 */
sendAjaxPost=function(url, data, successfn) {
    data = (data==null || data=="" || typeof(data)=="undefined")? {"date": new Date().getTime()} : data;
    $.ajax({
        type: "post",
        data: data,
        url: url,
        dataType: "json",
        success: function(d){
            successfn(d);
        }
    });
};
/**
 * ajax封装
 * url 发送请求的地址
 * data 发送到服务器的数据，数组存储，如：{"date": new Date().getTime(), "state": 1}
 * successfn 成功回调函数
 * errorfn 失败回调函数
 */
sendAjaxPostToError=function(url, data, successfn,errorfn) {
    data = (data==null || data=="" || typeof(data)=="undefined")? {"date": new Date().getTime()} : data;
    $.ajax({
        type: "post",
        data: data,
        url: url,
        dataType: "json",
        success: function(d){
            successfn(d);
        },
        error: function(e){
            errorfn(e);
        }
    });
};

/**
 * ajax封装
 * url 发送请求的地址
 * data 发送到服务器的数据，数组存储，如：{"date": new Date().getTime(), "state": 1}
 * dataType 预期服务器返回的数据类型，常用的如：xml、html、json、text
 * successfn 成功回调函数
 * errorfn 失败回调函数
 * completefn 完成后调用的回调函数
 * beforeSendfn 请求前的操作
 */
sendAjaxPostToCallback=function(url, data, successfn, errorfn,beforeSendfn, completefn) {
    data = (data==null || data=="" || typeof(data)=="undefined")? {"date": new Date().getTime()} : data;
    $.ajax({
        type: "post",
        data: data,
        url: url,
        dataType: "json",
        beforeSend:function(e){
            beforeSendfn(e);
        },
        complete: function(d){
            completefn(d);
        },
        success: function(d){
            successfn(d);
        },
        error: function(e){
            errorfn(e);
        }
    });
};
/**
 * ajax封装
 * url 发送请求的地址
 * data 发送到服务器的数据，数组存储，如：{"date": new Date().getTime(), "state": 1}
 * dataType 预期服务器返回的数据类型，常用的如：xml、html、json、text
 * successfn 成功回调函数
 * errorfn 失败回调函数
 * completefn 完成后调用的回调函数
 * beforeSendfn 请求前的操作
 */
sendAjaxPostFileToCallback=function(url, data, successfn, errorfn,beforeSendfn, completefn) {
    data = (data==null || data=="" || typeof(data)=="undefined")? {"date": new Date().getTime()} : data;
    $.ajax({
        type: "post",
        data: data,
        url: url,
        dataType: "json",
        processData: false,			//对数据不做处理
        cache:false,      				//上传文件不需要缓存
        contentType: false,
        mimeType:"multipart/form-data",
        beforeSend:function(e){
            beforeSendfn(e);
        },
        complete: function(d){
            completefn(d);
        },
        success: function(d){
            successfn(d);
        },
        error: function(e){
            errorfn(e);
        }
    });
};
/**
 * ajax封装
 * url 发送请求的地址
 * data 发送到服务器的数据，数组存储，如：{"date": new Date().getTime(), "state": 1}
 * dataType 预期服务器返回的数据类型，常用的如：xml、html、json、text
 * successfn 成功回调函数
 * errorfn 失败回调函数
 * completefn 完成后调用的回调函数
 * beforeSendfn 请求前的操作
 */
sendAjaxPostToCallbackJson=function(url, data, successfn, errorfn,beforeSendfn, completefn) {
    data = (data==null || data=="" || typeof(data)=="undefined")? {"date": new Date().getTime()} : data;
    $.ajax({
        type: "post",
        contentType:"application/json;charset=utf-8",
        data: JSON.stringify(data),
        url: url,
        dataType: "json",
        beforeSend:function(e){
            beforeSendfn(e);
        },
        complete: function(d){
            completefn(d);
        },
        success: function(d){
            successfn(d);
        },
        error: function(e){
            errorfn(e);
        }
    });
};
/**
 * ajax封装
 * url 发送请求的地址
 * data 发送到服务器的数据，数组存储，如：{"date": new Date().getTime(), "state": 1}
 * dataType 预期服务器返回的数据类型，常用的如：xml、html、json、text
 * async 默认值: true。默认设置下，所有请求均为异步请求。如果需要发送同步请求，请将此选项设置为 false。
 *    注意，同步请求将锁住浏览器，用户其它操作必须等待请求完成才可以执行。
 * successfn 成功回调函数
 * errorfn 失败回调函数
 * completefn 完成后调用的回调函数
 * beforeSendfn 请求前的操作
 */
sendAjaxPostToCallbackAsync=function(url, data, async, successfn, errorfn,beforeSendfn, completefn) {
    async = (async==null || async=="" || typeof(async)=="undefined")? "true" : async;
    data = (data==null || data=="" || typeof(data)=="undefined")? {"date": new Date().getTime()} : data;
    $.ajax({
        type: "post",
        data: data,
        url: url,
        async: async,
        dataType: "json",
        beforeSend:function(e){
            beforeSendfn(e);
        },
        complete: function(d){
            completefn(d);
        },
        success: function(d){
            successfn(d);
        },
        error: function(e){
            errorfn(e);
        }
    });
};
